Spring Boot:项目启动时如何执行特定方法
1. @PostConstruct
应该也是最简单的方式
直接在方式上面注入,但是会影响服务提供,比如这个方法要执行五分钟 这五分钟之内是无法提供服务的,这个方法是在服务初始化后之前运行, 所以 此方法运行不结束,服务就无法初始化, 在这过程路也无法提供服务
@PostConstruct public void pingStart(){ System.out.println(" ping start:"); getPingip(); System.out.println(" ping end: "); }
|
2. 使用ApplicationListener
是通过监听接口方式启动,服务已经初始化过,不影响 服务启动,并且启动之后可以正常提供服务
@Component public class ApplicationStartQuartzJobListener implements ApplicationListener<ContextRefreshedEvent>{ @Autowired private QuartzManager quartzManager;
@Override public void onApplicationEvent(ContextRefreshedEvent event) { try { quartzManager.start(); System.out.println("任务已经启动..."); } catch (Exception e) { e.printStackTrace(); } }
|
3. CommandLineRunner
也是监听接口方式,启动服务,执行方式时仍然提供服务,服务初始化之后,执行方法
@Component public class StartPingService implements CommandLineRunner{ @Autowired Ping ping; @Override public void run(String... args) throws Exception { ping.pingStart(); } }
|
4. 指定启动方法执行的顺序
这两种方式的实现都很简单,直接实现了相应的接口就可以了。记得在类上加@Component注解。
如果想要指定启动方法执行的顺序,可以通过实现org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解来实现。
1.Ordered接口:
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.stereotype.Component;
@Component public class MyApplicationRunner implements ApplicationRunner,Ordered{ @Override public int getOrder(){ return 1;//通过设置这里的数字来知道指定顺序 }
@Override public void run(ApplicationArguments var1) throws Exception{ System.out.println("MyApplicationRunner1!"); } } 1234567891011121314151617
|
2.Order注解实现方式:
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component;
@Component @Order(value = 1) public class MyApplicationRunner implements ApplicationRunner{
@Override public void run(ApplicationArguments var1) throws Exception{ System.out.println("MyApplicationRunner1!"); } }
用例, 类, 写作, 顺序
|